파 이 썬 파충류 가방 BeautifulSoup 재 귀적 캡 처 실례 상세 설명
개요:
파충류 의 주요 목적 은 인터넷 을 따라 필요 한 내용 을 잡기 위 한 것 이다.그것들의 본질은 일종 의 귀속 과정 이다.그들 은 먼저 웹 페이지 의 내용 을 얻 은 다음 에 페이지 의 내용 을 분석 하고 다른 URL 을 찾 은 다음 에 이 URL 의 페이지 내용 을 얻 고 이 과정 을 계속 반복 해 야 한다.
위 키 피 디 아 를 예 로 들 자.
우 리 는 위 키 피 디 아 에서 케 빈 베 켄 단어 에서 다른 단 어 를 가리 키 는 모든 링크 를 추출 하고 싶 습 니 다.
# -*- coding: utf-8 -*-
# @Author: HaonanWu
# @Date: 2016-12-25 10:35:00
# @Last Modified by: HaonanWu
# @Last Modified time: 2016-12-25 10:52:26
from urllib2 import urlopen
from bs4 import BeautifulSoup
html = urlopen('http://en.wikipedia.org/wiki/Kevin_Bacon')
bsObj = BeautifulSoup(html, "html.parser")
for link in bsObj.findAll("a"):
if 'href' in link.attrs:
print link.attrs['href']
위의 이 코드 는 페이지 의 모든 하이퍼링크 를 추출 할 수 있다.
/wiki/Wikipedia:Protection_policy#semi
#mw-head
#p-search
/wiki/Kevin_Bacon_(disambiguation)
/wiki/File:Kevin_Bacon_SDCC_2014.jpg
/wiki/San_Diego_Comic-Con
/wiki/Philadelphia
/wiki/Pennsylvania
/wiki/Kyra_Sedgwick
우선 추출 한 URL 이 중 복 될 수 있 습 니 다.그 다음 에 일부 URL 은 우리 가 필요 로 하지 않 는 것 이다.예 를 들 어 사 이 드 바,머 릿 말,꼬 릿 말,디 렉 터 리 바 링크 등 이다.
그래서 관찰 을 통 해 우 리 는 모든 가리 키 는 단어 페이지 의 링크 가 세 가지 특징 을 가지 고 있다 는 것 을 알 수 있다.
from urllib2 import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import re
pages = set()
random.seed(datetime.datetime.now())
def getLinks(articleUrl):
html = urlopen("http://en.wikipedia.org"+articleUrl)
bsObj = BeautifulSoup(html, "html.parser")
return bsObj.find("div", {"id":"bodyContent"}).findAll("a", href=re.compile("^(/wiki/)((?!:).)*$"))
links = getLinks("/wiki/Kevin_Bacon")
while len(links) > 0:
newArticle = links[random.randint(0, len(links)-1)].attrs["href"]
if newArticle not in pages:
print(newArticle)
pages.add(newArticle)
links = getLinks(newArticle)
그 중에서 getLinks 의 인 자 는/wiki/<단어 이름>이 고 위 키 백과 의 절대 경로 와 합 쳐 페이지 의 URL 을 얻 을 수 있 습 니 다.정규 표현 식 을 통 해 다른 단 어 를 가리 키 는 모든 URL 을 캡 처 하고 주 함수 에 되 돌려 줍 니 다.주 함 수 는 재 귀적 getlinks 를 호출 하여 방문 하지 않 은 URL 에 무 작위 로 접근 합 니 다.단어 가 없 거나 주동 적 으로 멈 출 때 까지.
이 코드 는 위 키 피 디 아 전 체 를 캡 처 할 수 있다.
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
pages = set()
def getLinks(pageUrl):
global pages
html = urlopen("http://en.wikipedia.org"+pageUrl)
bsObj = BeautifulSoup(html, "html.parser")
try:
print(bsObj.h1.get_text())
print(bsObj.find(id ="mw-content-text").findAll("p")[0])
print(bsObj.find(id="ca-edit").find("span").find("a").attrs['href'])
except AttributeError:
print("This page is missing something! No worries though!")
for link in bsObj.findAll("a", href=re.compile("^(/wiki/)")):
if 'href' in link.attrs:
if link.attrs['href'] not in pages:
#We have encountered a new page
newPage = link.attrs['href']
print("----------------
"+newPage)
pages.add(newPage)
getLinks(newPage)
getLinks("")
일반적으로 Python 의 귀속 제한 은 1000 회 이기 때문에 인위적으로 비교적 큰 귀속 계산 기 를 설치 하거나 다른 수단 으로 코드 를 1000 회 교체 한 후에 도 실행 할 수 있 도록 해 야 한다.읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.